/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swatsoft3.dao;

import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import swatsoft3.controlador.BL_GestorConfiguracion;
import swatsoft3.modelo.*;

/**
 *
 * @author renzo
 */
public class DAO_MySQL {

    public static final String enfermedad = "enfermedad";
    public static final String sintoma = "sintoma";
    public static final String cura = "cura";
    public static Connection conexxion = null;

    public static void cierraConexion() {
        try {
            conexxion.close();
            conexxion = null;
        } catch (Exception ex) {
        }
    }

    public static Connection dameConexion() {
        if (conexxion == null) {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conexxion = DriverManager.getConnection("jdbc:mysql://" + BL_GestorConfiguracion.dameIpServidorBaseDatos() + "/swat", "root", "root");
            } catch (Exception e) {
                System.out.println("Error en la base de datos");
            }
        }
        return conexxion;
    }

    public static BE_Documento leeDocumentoProcesado(int i) throws Exception {

        BE_Documento doc = new BE_Documento();

        try {
            Connection conexion = dameConexion();
            PreparedStatement ps = conexion.prepareStatement("SELECT * FROM DOCUMENTOS WHERE idDocumento = ?");
            ps.setInt(1, i);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {

                Blob blob = rs.getBlob("objeto");

                // Se reconstruye el objeto con un ObjectInputStream
                ObjectInputStream ois = new ObjectInputStream(blob.getBinaryStream());
                doc = (BE_Documento) ois.readObject();
            }

        } catch (Exception ex) {
            System.out.println("Error al leer de base. " + ex);
        }

        return doc;
    }

    public static int dameMinimo() throws Exception {

        int minimo = 0;

        try {
            Connection conexion = dameConexion();
            PreparedStatement ps = conexion.prepareStatement("SELECT MIN(idDocumento) FROM DOCUMENTOS");
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                minimo = rs.getInt("MIN(idDocumento)");
            }

        } catch (Exception ex) {
            System.out.println("Error al obtener el mínimo");
        }

        return minimo;
    }

    public static int dameTotal() throws Exception {

        int total = 0;

        try {
            Connection conexion = dameConexion();
            PreparedStatement ps = conexion.prepareStatement("SELECT COUNT(*) FROM DOCUMENTOS");
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                total = rs.getInt("COUNT(*)");
            }

        } catch (Exception ex) {
            System.out.println("Error al obtener el total.");
        }

        return total;
    }

    public static boolean verificaExiste(String titulo) throws Exception {

        boolean resultado = false;

        try {
            Connection conexion = dameConexion();
            PreparedStatement ps = conexion.prepareStatement("SELECT titulo FROM DOCUMENTOS WHERE titulo = ?");
            ps.setString(1, titulo);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                resultado = true;
            }

        } catch (Exception ex) {
            System.out.println("Error al verificar el archivo.");
        }

        return resultado;
    }

    public static void guardaDocumentoProcesado(BE_Documento documento) {

        try {
            //Esta parte convierte la clase a flujo de bytes
            ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
            ObjectOutputStream oos = null;
            oos = new ObjectOutputStream(byteArray);
            oos.writeObject(documento);

            //Esta parte escribe en la base de datos
            Connection conexion = dameConexion();
            PreparedStatement ps = conexion.prepareStatement("INSERT INTO DOCUMENTOS VALUES (null, ?, ?, ?)");
            ps.setString(1, documento.getTitulo());
            ps.setString(2, documento.getRuta());
            ps.setBytes(3, byteArray.toByteArray());
            ps.execute();

            cierraConexion();
        } catch (Exception ex) {
            System.out.println("Error al guardar en base. " + ex);
        }
    }
}